"ui";

// 设置UI布局
ui.layout(
    <vertical gravity="center">
        <text textSize="20sp" textColor="#000000" gravity="center" marginBottom="16">请输入账号ID</text>
        
        
        <input id="inputField" hint="ID" textSize="18sp" marginBottom="16" width="300dp" height="40dp"/>

        
        <horizontal gravity="center" marginTop="16">
            <button id="resumeBtn" text="恢复" textSize="16sp" w="120" h="40" marginRight="16" background="#4CAF50"/>
            <button id="exitBtn" text="退出" textSize="16sp" w="120" h="40" background="#F44336"/>
        </horizontal>


        <text textSize="10sp" textColor="#000000" gravity="center" marginBottom="16">PS:请手动打开一次某音退出后台再恢复，避免出现不知名BUG。 </text>
        <text textSize="10sp" textColor="#000000" gravity="center" marginBottom="16">By:D. </text>
    </vertical>
);

// 恢复按钮的点击事件
ui.resumeBtn.on("click", () => {
    // 获取输入框的内容
    var inputContent = ui.inputField.text().trim();

    // 检查输入是否为空
    if (inputContent === "") {
        toast("请输入有效内容");
        return;
    }

    // 动态生成URL和路径
    var url = "http://38.207.185.46:8080/directlink/1/" + inputContent + ".zip";
    var sdCardPath = "/sdcard/" + inputContent + ".zip"; // 下载到SD卡
    var tempExtractPath = "/sdcard/temp_extract/"; // 解压到SD卡的临时目录
    var downloadPath = "/data/data/com.ss.android.ugc.aweme/files/" + inputContent + ".zip"; // 复制到抖音的私有目录
    var extractPath = "/data/data/com.ss.android.ugc.aweme/files/"; // 目标解压路径

    // 将下载、解压、复制过程放入后台线程中
    threads.start(function() {
        toast("开始下载");
        try {
            if (downloadFile(url, sdCardPath)) {
                console.log("文件下载完成");

                unzipFile(sdCardPath, tempExtractPath); // 解压到临时目录

                if (copyExtractedFilesToPrivateDir(tempExtractPath, extractPath)) {
                    //console.log("文件复制完成");

                    // 删除临时文件和目录a
                    deleteTempFiles();
                } else {
                    toast("文件复制失败");
                }
            } else {
                toast("下载失败");
            }
        } catch (e) {
            console.error("脚本执行过程中发生错误：" + e.message);
            toast("脚本执行过程中发生错误");
        }
    });
});

// 退出按钮的点击事件
ui.exitBtn.on("click", () => {
    toast("脚本退出");
    exit();
});

// 下载ZIP文件到SD卡
function downloadFile(url, path) {
    try {
        var startTime = new Date().getTime();
        var res = http.get(url);
        if (res.statusCode == 200) {
            var fos = new java.io.FileOutputStream(new java.io.File(path));
            fos.write(res.body.bytes());
            fos.close();
            var endTime = new Date().getTime();
            console.log("文件下载完成到SD卡，耗时：" + (endTime - startTime) + "毫秒");
            return true;
        } else {
            console.error("下载失败，状态码：" + res.statusCode);
            toast("下载失败，状态码：" + res.statusCode);
            return false;
        }
    } catch (e) {
        console.error("下载过程中发生错误：" + e.message);
        toast("下载过程中发生错误");
        return false;
    }
}

// 解压ZIP文件到SD卡
function unzipFile(zipFilePath, tempDirectory) {
    try {
        var zipFile = new java.io.File(zipFilePath);
        if (!zipFile.exists()) {
            console.error("ZIP文件不存在：" + zipFilePath);
            toast("ZIP文件不存在");
            return;
        }

        // 创建目标临时目录
        var destDir = new java.io.File(tempDirectory);
        if (!destDir.exists()) {
            destDir.mkdirs();
        }

        var zipInputStream = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFile));
        var entry;
        while ((entry = zipInputStream.getNextEntry()) != null) {
            var newFile = new java.io.File(tempDirectory, entry.getName());
            if (entry.isDirectory()) {
                newFile.mkdirs();
            } else {
                var outStream = new java.io.FileOutputStream(newFile);
                var buffer = new java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024);
                var len;
                while ((len = zipInputStream.read(buffer)) > 0) {
                    outStream.write(buffer, 0, len);
                }
                outStream.close();
            }
            zipInputStream.closeEntry();
        }

        zipInputStream.close();
        //console.log("解压完成到：" + tempDirectory);
        toast("解压完成");

    } catch (e) {
        //console.error("解压文件时发生错误: " + e.message);
        toast("解压文件时发生错误");
    }
}

// 将解压后的文件从SD卡复制到私有目录
function copyExtractedFilesToPrivateDir(tempDirectory, privateDirectory) {
    try {
        if (!checkRootPermission()) {
            console.error("没有获得root权限，无法访问抖音私有目录");
            toast("没有获得root权限");
            return false;
        }

        // 使用root权限复制解压后的文件到目标目录
        var command = "su -c 'cp -r " + tempDirectory + "/* " + privateDirectory + "'"; // 使用cp -r递归复制文件
        var result = shell(command, true);

        if (result.code === 0) {
            //console.log("文件成功复制到抖音私有目录");
            toast("文件成功复制到抖音私有目录");

            // 设置文件权限为 777
            var chmodCommand = "su -c 'chmod -R 777 " + privateDirectory + "'"; // 设置所有文件权限为777
            var chmodResult = shell(chmodCommand, true);

            if (chmodResult.code === 0) {
                //console.log("文件权限设置为777");
                alert("任务完成");
            } else {
                //console.error("设置权限失败");
                toast("设置权限失败");
            }

            return true;
        } else {
            console.error("文件复制过程中发生错误，shell命令返回码：" + result.code);
            toast("文件复制过程中发生错误");
            return false;
        }
    } catch (e) {
        console.error("复制文件时发生错误：" + e.message);
        toast("复制文件时发生错误");
        return false;
    }
}

// 删除临时文件和目录
function deleteTempFiles() {
    try {
        var sdCardFile = new java.io.File(sdCardPath);
        if (sdCardFile.exists()) {
            sdCardFile.delete();
            console.log("删除ZIP文件： " + sdCardPath);
        }

        var tempDir = new java.io.File(tempExtractPath);
        if (tempDir.exists()) {
            deleteDirectory(tempDir);
            console.log("删除临时目录：" + tempExtractPath);
        }

        toast("任务完成，临时文件已删除");

    } catch (e) {
        console.error("删除临时文件时发生错误：" + e.message);
        toast("删除临时文件时发生错误");
    }
}

// 递归删除目录中的所有文件和子目录
function deleteDirectory(directory) {
    var files = directory.listFiles();
    if (files) {
        for (var i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {
                deleteDirectory(files[i]);
            } else {
                files[i].delete();
            }
        }
    }
    directory.delete(); // 删除目录本身
}

// 检查root权限
function checkRootPermission() {
    return shell("su -c 'echo test'", true).code === 0;
}
